Vegetation & Built-up Indices • Remote Sensing

UI_NDBI – Urban Index (NDBI-based)

UI_NDBI is an urban / built-up intensity index derived from the classic NDBI formulation. It compares SWIR and NIR reflectance to highlight built-up areas and suppress vegetation and water.


UI_NDBI overview concept & use-cases

What does UI_NDBI measure?

UI_NDBI enhances the separation between urban / built-up surfaces and other land-cover classes by exploiting the higher SWIR reflectance of impervious materials compared with vegetation and water.

  • Mapping built-up / impervious surfaces inside and around cities.
  • Monitoring urban expansion and sprawl over time.
  • Supporting urban heat-island and land-surface temperature studies.
  • Pre-classification mask for detailed land-use / land-cover mapping.

UI_NDBI formula

General form
UI_NDBI = (SWIR - NIR) / (SWIR + NIR)

Values are typically in the range −1 to +1. Built-up areas tend to show positive UI_NDBI, while vegetation and water usually appear with negative values.

Landsat 5 / 7
UI_NDBI = (B5 - B4) / (B5 + B4)

Where B5 = SWIR1, B4 = NIR.

Landsat 8 / 9
UI_NDBI = (B6 - B5) / (B6 + B5)

Where B6 = SWIR1, B5 = NIR.

Sentinel-2 MSI
UI_NDBI = (B11 - B8) / (B11 + B8)

B11 = SWIR, B8 = NIR (10 m).

Notes

Always check band naming and scale factors for the collection you use in Google Earth Engine.

Required bands

Sensors & spectral bands

Sensor NIR SWIR
Landsat 5 TM / 7 ETM+ B4 B5
Landsat 8 / 9 OLI B5 B6
Sentinel-2 MSI B8 B11

Tip: resample SWIR to match NIR spatial resolution where needed (e.g. Sentinel-2 20 m → 10 m) before combining in UI_NDBI.

Typical value ranges

Land-cover type UI_NDBI trend
Dense built-up / impervious High positive (> 0.2)
Mixed urban / vegetation Around 0 to 0.2
Vegetation Negative (< 0)
Water Strongly negative

Ranges are indicative and depend on sensor, season, and atmospheric conditions. Always validate with reference data.

Using UI_NDBI in Google Earth Engine

  1. Select a surface-reflectance collection (e.g. Landsat 8/9 SR).
  2. Filter by date, cloud cover, and region of interest.
  3. Add a new band computed with the UI_NDBI formula.
  4. Visualize the index and export it if needed.
// UI_NDBI example for Landsat 8/9 in Google Earth Engine
var roi = /* your geometry here */;

var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
  .filterBounds(roi)
  .filterDate('2023-01-01', '2023-12-31')
  .filter(ee.Filter.lt('CLOUD_COVER', 20))
  .map(function(img) {
    // Apply scale factors
    var optical = img.select(['SR_B.']).multiply(0.0000275).add(-0.2);

    var nir  = optical.select('SR_B5');
    var swir = optical.select('SR_B6');

    var ui_ndbi = swir.subtract(nir).divide(swir.add(nir))
      .rename('UI_NDBI');

    return img.addBands(ui_ndbi);
  });

var uiImage = collection.median().select('UI_NDBI');

// Visualisation: highlight built-up areas
Map.centerObject(roi, 10);
Map.addLayer(uiImage, {min: -0.4, max: 0.6, palette: ['#0b1120','#22c55e','#fde047','#f97316']}, 'UI_NDBI');

Important: adjust collection ID, band names, scale factors, and date range to match your project and sensor.

Part of the Start4IT Remote Sensing Indices Library. More indices & ready-to-use code: www.start4it.com/rs-indices